home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newaliencontrol.s < prev    next >
Text File  |  1997-01-31  |  23KB  |  1,609 lines

  1.  
  2. gotgun: dc.w 0
  3.  
  4. ANIMPOINTER: dc.l 0
  5.  
  6. ASKFORPROT:
  7.  include "ab3:CHEESESAUCE/askforprot.s"
  8.  
  9. ALIENBRIGHT: dc.w 0
  10.  
  11. ItsAnAlien:
  12.  
  13.  tst.b NASTY
  14.  beq.s .NONASIES
  15.  
  16.  move.l #32*256,StepUpVal
  17.  move.l #32*256,StepDownVal
  18.  
  19. ; move.l #4,deadframe
  20. ; move.w #0,screamsound
  21. ; move.w #160,nasheight
  22.  
  23.  move.w 12(a0),GraphicRoom(a0)
  24.  move.w 12(a0),d2
  25.  bge.s .okalive
  26.  
  27.  
  28.  rts
  29.  
  30.  
  31. .NONASIES:
  32.  move.w #-1,12(a0)
  33.  rts
  34.  
  35. .okalive:
  36.  
  37.  move.l ZoneAdds,a5
  38.  move.l (a5,d2.w*4),d0
  39.  add.l LEVELDATA,d0
  40.  move.l d0,objroom
  41.  
  42.  moveq #0,d0
  43.  move.l LINKFILE,a6
  44.  move.l a6,a5
  45.  move.b TypeOfThing(a0),d0
  46.  add.l #AlienBrights,a5
  47.  move.w (a5,d0.w*2),d1
  48.  neg.w d1
  49.  move.w d1,ALIENBRIGHT
  50.  muls #A_AnimLen,d0
  51.  add.l #AlienAnimData,a6
  52.  add.l d0,a6
  53.  
  54.  move.l a6,ANIMPOINTER
  55.  
  56.  move.l LINKFILE,a1
  57.  lea AlienStats(a1),a1
  58.  moveq #0,d0
  59.  move.b TypeOfThing(a0),d0
  60.  muls #AlienStatLen,d0
  61.  add.w d0,a1 ; ptr to alien stats
  62.  
  63.  move.w A_Height(a1),d0
  64.  ext.l d0
  65.  asl.l #7,d0
  66.  move.l d0,thingheight
  67.  
  68.  move.w A_Auxilliary(a1),AUXOBJ
  69.  
  70.  move.w (a0),CollId
  71.  
  72.  move.b 1(a1),VECOBJ
  73.  move.w A_ReactionTime(a1),REACTIONTIME
  74.  move.w A_DefBeh(a1),DEFAULTMODE
  75.  move.w A_ResBeh(a1),RESPONSEMODE
  76.  move.w A_RetBeh(a1),RETREATMODE
  77.  move.w A_FolBeh(a1),FOLLOWUPMODE
  78.  move.w A_DefSpeed(a1),prowlspeed
  79.  move.w A_ResSpeed(a1),responsespeed
  80.  move.w A_RetSpeed(a1),retreatspeed
  81.  move.w A_FolSpeed(a1),followupspeed
  82.  move.w A_FolTimeout(a1),FOLLOWUPTIMER
  83.  move.w A_WallCollDist(a1),d0
  84.  move.b diststowall+1(pc,d0.w*4),awayfromwall
  85.  move.w diststowall+2(pc,d0.w*4),extlen
  86.   
  87.  jsr AIROUTINE
  88.  
  89.  rts
  90.  
  91. diststowall:
  92.  dc.w 0,40
  93.  dc.w 1,80
  94.  dc.w 2,160
  95.  
  96. ItsAnObject:
  97.  
  98.  move.l LINKFILE,a1
  99.  lea ObjectStats(a1),a1
  100.  moveq #0,d0
  101.  move.b TypeOfThing(a0),d0
  102.  muls #ObjectStatLen,d0
  103.  add.w d0,a1 ; pointer to obj stats.
  104.  
  105.  move.l a1,StatPointer
  106.  
  107.  move.w (a1),d0
  108.  cmp.w #1,d0
  109.  blt Collectable
  110.  beq Activatable
  111.  cmp.w #3,d0
  112.  blt Destructable
  113.  beq Decoration
  114.  
  115.  rts
  116.  
  117. GUNHELD:
  118.  
  119. ; This is a player gun in his hand.
  120.  
  121.  move.l a1,a2
  122.  jsr ACTANIMOBJ
  123.  
  124.  rts
  125.  
  126. Collectable:
  127.  
  128.  move.w 12(a0),d0
  129.  bge.s .okinroom
  130.  rts
  131. .okinroom
  132.  
  133.  tst.b WhichAnim(a0)
  134.  bne.s GUNHELD
  135.  
  136.  move.w d0,GraphicRoom(a0)
  137.  
  138.  tst.b NASTY
  139.  beq.s .nolocks
  140.  move.l DoorsHeld(a0),d1
  141.  or.l d1,DoorLocks
  142. .nolocks:
  143.  tst.b worry(a0)
  144.  bne.s .worryaboot
  145.  rts
  146. .worryaboot:
  147.  
  148.  and.b #$80,worry(a0)
  149.  move.l a1,a2
  150.  
  151.  move.l ZoneAdds,a1
  152.  move.l (a1,d0.w*4),a1
  153.  add.l LEVELDATA,a1
  154.  
  155.  tst.w O_FloorCeiling(a2)
  156.  beq.s .onfloor
  157.  move.l ToZoneRoof(a1),d0
  158.  tst.b ObjInTop(a0)
  159.  beq.s .okinbotc
  160.  move.l ToUpperRoof(a1),d0
  161. .okinbotc:
  162.  
  163.  bra.s .onceiling
  164.  
  165. .onfloor
  166.  move.l ToZoneFloor(a1),d0
  167.  tst.b ObjInTop(a0)
  168.  beq.s .okinbot
  169.  move.l ToUpperFloor(a1),d0
  170. .okinbot:
  171. .onceiling
  172.  
  173.  asr.l #7,d0
  174.  move.w d0,4(a0)
  175.  
  176.  bsr DEFANIMOBJ
  177.  
  178.  bsr CHECKNEARBYONE
  179.  tst.b d0
  180.  beq.s .NotCollected1
  181.  
  182.  bsr PLR1CollectObject
  183.  
  184. .NotCollected1
  185.  
  186.  cmp.b #'n',mors
  187.  beq.s .NotCollected2
  188.  bsr CHECKNEARBYTWO
  189.  tst.b d0
  190.  beq.s .NotCollected2
  191.  
  192.  bsr PLR2CollectObject
  193.  
  194. .NotCollected2
  195.  
  196.  
  197.  rts
  198.  
  199. Activatable:
  200.  
  201.  move.w 12(a0),d0
  202.  bge.s .okinroom
  203.  rts
  204. .okinroom
  205.  
  206.  tst.b WhichAnim(a0)
  207.  bne ACTIVATED
  208.  
  209.  move.w d0,GraphicRoom(a0)
  210.  tst.b NASTY
  211.  beq.s .nolocks
  212.  move.l DoorsHeld(a0),d1
  213.  or.l d1,DoorLocks
  214. .nolocks
  215.  tst.b worry(a0)
  216.  bne.s .worryaboot
  217.  rts
  218. .worryaboot:
  219.  
  220.  and.b #$80,worry(a0)
  221.  move.l a1,a2
  222.  
  223.  move.l ZoneAdds,a1
  224.  move.l (a1,d0.w*4),a1
  225.  add.l LEVELDATA,a1
  226.  
  227.  tst.w O_FloorCeiling(a2)
  228.  beq.s .onfloor
  229.  move.l ToZoneRoof(a1),d0
  230.  tst.b ObjInTop(a0)
  231.  beq.s .okinbotc
  232.  move.l ToUpperRoof(a1),d0
  233. .okinbotc:
  234.  
  235.  bra.s .onceiling
  236.  
  237. .onfloor
  238.  move.l ToZoneFloor(a1),d0
  239.  tst.b ObjInTop(a0)
  240.  beq.s .okinbot
  241.  move.l ToUpperFloor(a1),d0
  242. .okinbot:
  243. .onceiling
  244.  
  245.  asr.l #7,d0
  246.  move.w d0,4(a0)
  247.  
  248.  bsr DEFANIMOBJ
  249.  
  250.  bsr CHECKNEARBYONE
  251.  tst.b d0
  252.  beq.s .NotActivated1
  253.  
  254.  tst.b p1_spctap
  255.  beq.s .NotActivated1
  256.  
  257. ; The player has pressed the spacebar
  258. ; within range of the object.
  259.  
  260.  cmp.b #'s',mors
  261.  beq.s .notext
  262.  
  263.  move.w TextToShow(a0),d0
  264.  blt.s .notext
  265.  
  266.  muls #160,d0
  267.  add.l LEVELDATA,d0
  268.  move.w #0,SCROLLXPOS
  269.  move.l d0,SCROLLPOINTER
  270.  add.l #160,d0
  271.  move.l d0,ENDSCROLL
  272.  move.w #40,SCROLLTIMER
  273.  
  274. .notext:
  275.  
  276.  move.w #0,ObjTimer(a0)
  277.  st WhichAnim(a0)
  278.  move.w #0,SecTimer(a0)
  279.  rts
  280.  
  281. .NotActivated1:
  282.  
  283.  
  284.  cmp.b #'n',mors
  285.  beq .NotActivated2
  286.  bsr CHECKNEARBYTWO
  287.  tst.b d0
  288.  beq.s .NotActivated2
  289.  
  290.  tst.b p2_spctap
  291.  beq.s .NotActivated2
  292.  
  293. ; The player has pressed the spacebar
  294. ; within range of the object.
  295.  
  296.  cmp.b #'s',mors
  297.  bne.s .notext2
  298.  
  299.  move.w TextToShow(a0),d0
  300.  blt.s .notext2
  301.  
  302.  muls #160,d0
  303.  add.l LEVELDATA,d0
  304.  move.w #0,SCROLLXPOS
  305.  move.l d0,SCROLLPOINTER
  306.  add.l #160,d0
  307.  move.l d0,ENDSCROLL
  308.  move.w #40,SCROLLTIMER
  309.  
  310. .notext2:
  311.  
  312.  move.w #0,ObjTimer(a0)
  313.  st WhichAnim(a0)
  314.  move.w #0,SecTimer(a0)
  315.  rts
  316.  
  317. .NotActivated2:
  318.  
  319.  rts
  320.  
  321. ACTIVATED:
  322.  
  323.  move.w d0,GraphicRoom(a0)
  324. ; move.l DoorsHeld(a0),d1
  325. ; or.l d1,DoorLocks
  326.  tst.b worry(a0)
  327.  bne.s .worryaboot
  328.  rts
  329. .worryaboot:
  330.  
  331.  and.b #$80,worry(a0)
  332.  move.l a1,a2
  333.  
  334.  move.l ZoneAdds,a1
  335.  move.l (a1,d0.w*4),a1
  336.  add.l LEVELDATA,a1
  337.  
  338.  tst.w O_FloorCeiling(a2)
  339.  beq.s .onfloor
  340.  move.l ToZoneRoof(a1),d0
  341.  tst.b ObjInTop(a0)
  342.  beq.s .okinbotc
  343.  move.l ToUpperRoof(a1),d0
  344. .okinbotc:
  345.  
  346.  bra.s .onceiling
  347.  
  348. .onfloor
  349.  move.l ToZoneFloor(a1),d0
  350.  tst.b ObjInTop(a0)
  351.  beq.s .okinbot
  352.  move.l ToUpperFloor(a1),d0
  353. .okinbot:
  354. .onceiling
  355.  
  356.  asr.l #7,d0
  357.  move.w d0,4(a0)
  358.  
  359.  bsr ACTANIMOBJ
  360.  
  361.  move.w TempFrames,d0
  362.  add.w d0,SecTimer(a0)
  363.  move.w O_ActiveTimeout(a2),d0
  364.  blt.s .nottimeout
  365.  
  366.  cmp.w SecTimer(a0),d0
  367.  ble.s .DEACTIVATE
  368.  
  369. .nottimeout:
  370.  
  371.  bsr CHECKNEARBYONE
  372.  tst.b d0
  373.  beq.s .NotDeactivated1
  374.  
  375.  tst.b p1_spctap
  376.  beq.s .NotDeactivated1
  377.  
  378. ; The player has pressed the spacebar
  379. ; within range of the object.
  380.  
  381. .DEACTIVATE:
  382.  
  383.  move.w #0,ObjTimer(a0)
  384.  clr.b WhichAnim(a0)
  385.  rts
  386.  
  387. .NotDeactivated1:
  388.  
  389.  cmp.b #'n',mors
  390.  beq.s .NotDeactivated2
  391.  
  392.  bsr CHECKNEARBYTWO
  393.  tst.b d0
  394.  beq.s .NotDeactivated2
  395.  
  396.  tst.b p2_spctap
  397.  beq.s .NotDeactivated2
  398.  
  399. ; The player has pressed the spacebar
  400. ; within range of the object.
  401.  
  402.  move.w #0,ObjTimer(a0)
  403.  clr.b WhichAnim(a0)
  404.  rts
  405.  
  406. .NotDeactivated2:
  407.  
  408.  rts
  409.  
  410. Destructable:
  411.  
  412.  move.l LINKFILE,a3
  413.  add.l #ObjectStats,a3
  414.  moveq #0,d0
  415.  move.b TypeOfThing(a0),d0
  416.  muls #ObjectStatLen,d0
  417.  add.l d0,a3
  418.  
  419.  moveq #0,d0
  420.  move.b damagetaken(a0),d0
  421.  cmp.w O_HitPoints(a3),d0
  422.  blt StillHere
  423.  
  424.  tst.b numlives(a0)
  425.  beq.s .alreadydead
  426.  
  427.  move.w TextToShow(a0),d0
  428.  blt.s .notext
  429.  
  430.  muls #160,d0
  431.  add.l LEVELDATA,d0
  432.  move.w #0,SCROLLXPOS
  433.  move.l d0,SCROLLPOINTER
  434.  add.l #160,d0
  435.  move.l d0,ENDSCROLL
  436.  move.w #40,SCROLLTIMER
  437.  
  438. .notext:
  439.  
  440.  move.w #0,ObjTimer(a0)
  441.  
  442. .alreadydead
  443.  
  444.  move.b #0,numlives(a0)
  445.  
  446.  move.w 12(a0),d0
  447.  bge.s .okinroom
  448.  rts
  449. .okinroom
  450.  
  451.  tst.b worry(a0)
  452.  bne.s .worryaboot
  453.  rts
  454. .worryaboot:
  455.  
  456.  move.l a1,a2
  457.  
  458.  move.l ZoneAdds,a1
  459.  move.l (a1,d0.w*4),a1
  460.  add.l LEVELDATA,a1
  461.  
  462.  tst.w O_FloorCeiling(a2)
  463.  beq.s .onfloor
  464.  move.l ToZoneRoof(a1),d0
  465.  tst.b ObjInTop(a0)
  466.  beq.s .okinbotc
  467.  move.l ToUpperRoof(a1),d0
  468. .okinbotc:
  469.  
  470.  bra.s .onceiling
  471.  
  472. .onfloor
  473.  move.l ToZoneFloor(a1),d0
  474.  tst.b ObjInTop(a0)
  475.  beq.s .okinbot
  476.  move.l ToUpperFloor(a1),d0
  477. .okinbot:
  478. .onceiling
  479.  
  480.  asr.l #7,d0
  481.  move.w d0,4(a0)
  482.  
  483.  bsr ACTANIMOBJ
  484.  
  485.  rts
  486.  
  487. StillHere:
  488.  move.w 12(a0),d0
  489.  bge.s .okinroom
  490.  rts
  491. .okinroom
  492.  move.b #1,numlives(a0)
  493.  
  494.  tst.b NASTY
  495.  beq.s .nolocks
  496.  move.l DoorsHeld(a0),d1
  497.  or.l d1,DoorLocks
  498. .nolocks
  499.  
  500.  tst.b worry(a0)
  501.  bne.s .worryaboot
  502.  rts
  503. .worryaboot:
  504.  
  505.  movem.l d0-d7/a0-a6,-(a7)
  506.  
  507.  move.w 12(a0),d2
  508.  move.l ZoneAdds,a5
  509.  move.l (a5,d2.w*4),d0
  510.  add.l LEVELDATA,d0
  511.  move.l d0,objroom
  512.  
  513.  move.w (a0),d0
  514.  move.l ObjectPoints,a1
  515.  move.w (a1,d0.w*8),newx
  516.  move.w 4(a1,d0.w*8),newz
  517.  
  518.  jsr LOOKFORPLAYER1
  519.  movem.l (a7)+,d0-d7/a0-a6
  520.  
  521. Decoration
  522.  
  523.  move.w 12(a0),d0
  524.  bge.s .okinroom
  525.  rts
  526. .okinroom
  527.  
  528.  tst.b worry(a0)
  529.  bne.s .worryaboot
  530.  rts
  531. .worryaboot:
  532.  
  533.  
  534. intodeco:
  535.  move.l a1,a2
  536.  
  537.  move.l ZoneAdds,a1
  538.  move.l (a1,d0.w*4),a1
  539.  add.l LEVELDATA,a1
  540.  
  541.  tst.w O_FloorCeiling(a2)
  542.  beq.s .onfloor
  543.  move.l ToZoneRoof(a1),d0
  544.  tst.b ObjInTop(a0)
  545.  beq.s .okinbotc
  546.  move.l ToUpperRoof(a1),d0
  547. .okinbotc:
  548.  
  549.  bra.s .onceiling
  550.  
  551. .onfloor
  552.  move.l ToZoneFloor(a1),d0
  553.  tst.b ObjInTop(a0)
  554.  beq.s .okinbot
  555.  move.l ToUpperFloor(a1),d0
  556. .okinbot:
  557. .onceiling
  558.  
  559.  asr.l #7,d0
  560.  move.w d0,4(a0)
  561.  
  562.  bsr DEFANIMOBJ
  563.  
  564.  rts
  565.  
  566. PLR1CollectObject:
  567.  
  568.  cmp.b #'s',mors
  569.  beq.s .notext
  570.  
  571.  move.w TextToShow(a0),d0
  572.  blt.s .notext
  573.  
  574.  muls #160,d0
  575.  add.l LEVELDATA,d0
  576.  move.w #0,SCROLLXPOS
  577.  move.l d0,SCROLLPOINTER
  578.  add.l #160,d0
  579.  move.l d0,ENDSCROLL
  580.  move.w #40,SCROLLTIMER
  581.  
  582. .notext:
  583.  
  584.  move.l LINKFILE,a2
  585.  lea AmmoGive(a2),a3
  586.  add.l #GunGive,a2
  587.  moveq #0,d0
  588.  move.b TypeOfThing(a0),d0
  589.  move.w d0,d1
  590.  muls #AmmoGiveLen,d0
  591.  muls #GunGiveLen,d1
  592.  add.w d1,a2
  593.  add.w d0,a3
  594.  
  595. ; Check if player has max of all ammo types:
  596.  
  597.  bsr CHECKPLAYERGOT
  598.  tst.b d0
  599.  beq dontcollect
  600.  
  601.  move.w #21,d0
  602.  move.l #PLAYERONEHEALTH,a1
  603. GiveAmmo:
  604.  move.w (a3)+,d1
  605.  add.w d1,(a1)+
  606.  dbra d0,GiveAmmo
  607.  
  608.  move.w #11,d0
  609.  move.l #PLAYERONESHIELD,a1
  610. GiveGuns:
  611.  move.w (a2)+,d1
  612.  or.w d1,(a1)+
  613.  dbra d0,GiveGuns
  614.  
  615.  move.l LINKFILE,a3
  616.  add.l #ObjectStats,a3
  617.  moveq #0,d0
  618.  move.b TypeOfThing(a0),d0
  619.  muls #ObjectStatLen,d0
  620.  add.l d0,a3
  621.  
  622.  move.w O_SoundEffect(a3),d0
  623.  blt.s .nosoundmake
  624.  
  625.  movem.l d0-d7/a0-a6,-(a7)
  626.  move.w d0,Samplenum
  627.  clr.b notifplaying
  628.  move.b 1(a0),IDNUM
  629.  move.w #80,Noisevol
  630.  move.l #ObjRotated,a1
  631.  move.w (a0),d0
  632.  lea (a1,d0.w*8),a1
  633.  move.l (a1),Noisex
  634.  jsr MakeSomeNoise
  635.  movem.l (a7)+,d0-d7/a0-a6
  636. .nosoundmake
  637.  
  638.  move.w #-1,12(a0)
  639.  clr.b worry(a0)
  640.  
  641. dontcollect:
  642.  rts 
  643.  
  644. PLR2CollectObject:
  645.  
  646.  cmp.b #'s',mors
  647.  bne.s .notext
  648.  
  649.  move.w TextToShow(a0),d0
  650.  blt.s .notext
  651.  
  652.  muls #160,d0
  653.  add.l LEVELDATA,d0
  654.  move.w #0,SCROLLXPOS
  655.  move.l d0,SCROLLPOINTER
  656.  add.l #160,d0
  657.  move.l d0,ENDSCROLL
  658.  move.w #40,SCROLLTIMER
  659.  
  660. .notext:
  661.  
  662.  move.l LINKFILE,a2
  663.  lea AmmoGive(a2),a3
  664.  add.l #GunGive,a2
  665.  moveq #0,d0
  666.  move.b TypeOfThing(a0),d0
  667.  move.w d0,d1
  668.  muls #AmmoGiveLen,d0
  669.  muls #GunGiveLen,d1
  670.  add.w d1,a2
  671.  add.w d0,a3
  672.  
  673. ; Check if player has max of all ammo types:
  674.  
  675.  bsr CHECKPLAYERGOT
  676.  tst.b d0
  677.  beq dontcollect2
  678.  
  679.  move.w #21,d0
  680.  move.l #PLAYERTWOHEALTH,a1
  681. GiveAmmo2:
  682.  move.w (a3)+,d1
  683.  add.w d1,(a1)+
  684.  dbra d0,GiveAmmo2
  685.  
  686.  move.w #11,d0
  687.  move.l #PLAYERTWOSHIELD,a1
  688. GiveGuns2:
  689.  move.w (a2)+,d1
  690.  or.w d1,(a1)+
  691.  dbra d0,GiveGuns2
  692.  
  693.  move.l LINKFILE,a3
  694.  add.l #ObjectStats,a3
  695.  moveq #0,d0
  696.  move.b TypeOfThing(a0),d0
  697.  muls #ObjectStatLen,d0
  698.  add.l d0,a3
  699.  
  700.  move.w O_SoundEffect(a3),d0
  701.  blt.s .nosoundmake
  702.  
  703.  movem.l d0-d7/a0-a6,-(a7)
  704.  move.w d0,Samplenum
  705.  clr.b notifplaying
  706.  move.b 1(a0),IDNUM
  707.  move.w #80,Noisevol
  708.  move.l #ObjRotated,a1
  709.  move.w (a0),d0
  710.  lea (a1,d0.w*8),a1
  711.  move.l (a1),Noisex
  712.  jsr MakeSomeNoise
  713.  movem.l (a7)+,d0-d7/a0-a6
  714. .nosoundmake
  715.  
  716.  move.w #-1,12(a0)
  717.  clr.b worry(a0)
  718.  
  719. dontcollect2:
  720.  rts 
  721.  
  722. PLAYERONEHEALTH:
  723.   dc.w 0
  724. PLAYERONEFUEL:
  725.   dc.w 0
  726. PLAYERONEAMMO:
  727.  ds.w 20
  728.  
  729. PLAYERONESHIELD:
  730.  dc.w 0
  731. PLAYERONEJETPACK:
  732.  dc.w 0
  733. PLAYERONEGUNS:
  734.  dcb.w 10,0
  735.  
  736. PLAYERTWOHEALTH:
  737.   dc.w 0
  738. PLAYERTWOFUEL:
  739.   dc.w 0
  740. PLAYERTWOAMMO:
  741.  ds.w 20
  742.  
  743. PLAYERTWOSHIELD:
  744.  dc.w 0
  745. PLAYERTWOJETPACK:
  746.  dc.w 0
  747. PLAYERTWOGUNS:
  748.  dcb.w 10,0
  749.  
  750.   
  751. CHECKPLAYERGOT:
  752.  move.b #1,d0
  753.  rts
  754.  
  755. CHECKNEARBYONE:
  756.  
  757.  move.l StatPointer,a2
  758.  move.b PLR1_StoodInTop,d0
  759.  move.b ObjInTop(a0),d1
  760.  eor.b d0,d1
  761.  bne .NotSameZone
  762.  
  763.  move.w PLR1_xoff,oldx
  764.  move.w PLR1_zoff,oldz
  765.  move.w PLR1_Zone,d7
  766.  
  767.  cmp.w 12(a0),d7
  768.  bne .NotSameZone
  769.  
  770.  move.l PLR1_yoff,d7
  771.  move.l PLR1_height,d6
  772.  asr.l #1,d6
  773.  add.l d6,d7
  774.  asr.l #7,d7
  775.  sub.w 4(a0),d7
  776.  bgt.s .okpos
  777.  neg.w d7
  778. .okpos
  779.  
  780.  cmp.w O_ColBoxHeight(a2),d7
  781.  bgt .NotSameZone
  782.  
  783.  move.w (a0),d0
  784.  move.l ObjectPoints,a1
  785.  move.w (a1,d0.w*8),newx
  786.  move.w 4(a1,d0.w*8),newz
  787.  move.w O_ColBoxRad(a2),d2
  788.  muls d2,d2
  789.  jsr CheckHit
  790.  move.b hitwall,d0
  791.  rts
  792. .NotSameZone
  793.  moveq #0,d0
  794.  rts 
  795.  
  796. CHECKNEARBYTWO:
  797.  
  798.  move.l StatPointer,a2
  799.  move.b PLR2_StoodInTop,d0
  800.  move.b ObjInTop(a0),d1
  801.  eor.b d0,d1
  802.  bne .NotSameZone
  803.  
  804.  move.w PLR2_xoff,oldx
  805.  move.w PLR2_zoff,oldz
  806.  move.w PLR2_Zone,d7
  807.  
  808.  cmp.w 12(a0),d7
  809.  bne .NotSameZone
  810.  
  811.  move.l PLR2_yoff,d7
  812.  move.l PLR2_height,d6
  813.  asr.l #1,d6
  814.  add.l d6,d7
  815.  asr.l #7,d7
  816.  sub.w 4(a0),d7
  817.  bgt.s .okpos
  818.  neg.w d7
  819. .okpos
  820.  
  821.  cmp.w O_ColBoxHeight(a2),d7
  822.  bgt .NotSameZone
  823.  
  824.  move.w (a0),d0
  825.  move.l ObjectPoints,a1
  826.  move.w (a1,d0.w*8),newx
  827.  move.w 4(a1,d0.w*8),newz
  828.  move.w O_ColBoxRad(a2),d2
  829.  muls d2,d2
  830.  jsr CheckHit
  831.  move.b hitwall,d0
  832.  rts
  833. .NotSameZone
  834.  moveq #0,d0
  835.  rts 
  836.  
  837. StatPointer: dc.l 0
  838.  
  839. DEFANIMOBJ:
  840.  
  841.  move.l LINKFILE,a3
  842.  lea ObjectDefAnims(a3),a3
  843.  moveq #0,d0
  844.  move.b TypeOfThing(a0),d0
  845.  muls #O_AnimSize,d0
  846.  add.w d0,a3
  847.  move.w ObjTimer(a0),d0
  848.  
  849.  move.w d0,d1
  850.  add.w d0,d0
  851.  asl.w #2,d1
  852.  add.w d1,d0    ;*6
  853.  
  854.  cmp.w #1,O_GFXType(a2)
  855.  blt.s .bitmap
  856.  beq.s .vector
  857.  
  858. .glare:
  859.  move.l #0,8(a0)
  860.  move.b (a3,d0.w),d1
  861.  ext.w d1
  862.  neg.w d1
  863.  move.w d1,8(a0)
  864.  move.b 1(a3,d0.w),11(a0)
  865.  move.w 2(a3,d0.w),6(a0)
  866.  
  867.  move.b 4(a3,d0.w),d1 
  868.  ext.w d1
  869.  add.w d1,d1
  870.  add.w d1,4(a0)
  871.  
  872.  moveq #0,d1
  873.  move.b 5(a3,d0.w),d1
  874.  move.w d1,ObjTimer(a0)
  875.  rts
  876.  
  877. .vector:
  878.  
  879.  move.l #0,8(a0)
  880.  move.b (a3,d0.w),9(a0)
  881.  move.b 1(a3,d0.w),11(a0)
  882.  
  883.  move.w #$ffff,6(a0)
  884.  move.b 4(a3,d0.w),d1 
  885.  ext.w d1
  886.  add.w d1,d1
  887.  add.w d1,4(a0)
  888.  move.w 2(a3,d0.w),d1
  889.  add.w d1,Facing(a0)
  890.  
  891.  moveq #0,d1
  892.  move.b 5(a3,d0.w),d1
  893.  move.w d1,ObjTimer(a0)
  894.  
  895.  rts
  896.  
  897. .bitmap:
  898.  
  899.  move.l #0,8(a0)
  900.  move.b (a3,d0.w),9(a0)
  901.  move.b 1(a3,d0.w),11(a0)
  902.  move.w 2(a3,d0.w),6(a0)
  903.  move.b 4(a3,d0.w),d1 
  904.  ext.w d1
  905.  add.w d1,d1
  906.  add.w d1,4(a0)
  907.  
  908.  moveq #0,d1
  909.  move.b 5(a3,d0.w),d1
  910.  move.w d1,ObjTimer(a0)
  911.  
  912.  rts
  913.  
  914. ACTANIMOBJ:
  915.  
  916.  move.l LINKFILE,a3
  917.  lea ObjectActAnims(a3),a3
  918.  moveq #0,d0
  919.  move.b TypeOfThing(a0),d0
  920.  muls #O_AnimSize,d0
  921.  add.w d0,a3
  922.  move.w ObjTimer(a0),d0
  923.  
  924.  move.w d0,d1
  925.  add.w d0,d0
  926.  asl.w #2,d1
  927.  add.w d1,d0    ;*6
  928.  
  929.  cmp.w #1,O_GFXType(a2)
  930.  blt.s .bitmap
  931.  beq.s .vector
  932.  
  933. .glare:
  934.  move.l #0,8(a0)
  935.  move.b (a3,d0.w),d1
  936.  ext.w d1
  937.  neg.w d1
  938.  move.w d1,8(a0)
  939.  move.b 1(a3,d0.w),11(a0)
  940.  move.w 2(a3,d0.w),6(a0)
  941.  
  942.  move.b 4(a3,d0.w),d1 
  943.  ext.w d1
  944.  add.w d1,d1
  945.  add.w d1,4(a0)
  946.  
  947.  moveq #0,d1
  948.  move.b 5(a3,d0.w),d1
  949.  move.w d1,ObjTimer(a0)
  950.  
  951.  rts
  952.  
  953. .vector:
  954.  move.l #0,8(a0)
  955.  move.b (a3,d0.w),9(a0)
  956.  move.b 1(a3,d0.w),11(a0)
  957.  move.w #$ffff,6(a0)
  958.  move.b 4(a3,d0.w),d1 
  959.  ext.w d1
  960.  add.w d1,d1
  961.  add.w d1,4(a0)
  962.  
  963.  move.w 2(a3,d0.w),d1
  964.  add.w d1,Facing(a0)
  965.  
  966.  moveq #0,d1
  967.  move.b 5(a3,d0.w),d1
  968.  move.w d1,ObjTimer(a0)
  969.  
  970.  rts
  971.  
  972. .bitmap:
  973.  
  974.  move.l #0,8(a0)
  975.  move.b (a3,d0.w),9(a0)
  976.  move.b 1(a3,d0.w),11(a0)
  977.  move.w 2(a3,d0.w),6(a0)
  978.  move.b 4(a3,d0.w),d1 
  979.  ext.w d1
  980.  add.w d1,d1
  981.  add.w d1,4(a0)
  982.  
  983.  moveq #0,d1
  984.  move.b 5(a3,d0.w),d1
  985.  move.w d1,ObjTimer(a0)
  986.  
  987.  rts
  988.  
  989.  
  990. THISPLRxoff: dc.w 0
  991. THISPLRzoff: dc.w 0
  992.  
  993. ViewpointToDraw:
  994. ; Calculate which side to display:
  995.  
  996. ; move.l ObjectPoints,a1
  997. ; move.w (a0),d1
  998. ; lea (a1,d1.w*8),a1    ; ptr to points 
  999.  
  1000. ; move.w (a1),oldx
  1001. ; move.w 4(a1),oldz
  1002. ; move.w THISPLRxoff,newx
  1003. ; move.w THISPLRzoff,newz
  1004. ; move.w #64,speed
  1005. ; move.w #-60,Range
  1006. ; movem.l a0/a1,-(a7)
  1007. ; jsr HeadTowards
  1008. ; movem.l (a7)+,a0/a1
  1009. ; move.w newx,d0
  1010. ; sub.w oldx,d0
  1011. ; move.w newz,d1
  1012. ; sub.w oldz,d1
  1013.  
  1014.  move.w Facing(a0),d3
  1015.  sub.w angpos,d3 
  1016.  
  1017. ; add.w #2048,d3
  1018.  and.w #8190,d3
  1019.  move.l #SineTable,a2
  1020.  move.w (a2,d3.w),d2
  1021.  adda.w #2048,a2
  1022.  move.w (a2,d3.w),d3
  1023.  
  1024. ; move.w d0,d4
  1025. ; move.w d1,d5
  1026. ; muls d3,d4
  1027. ; muls d2,d5
  1028. ; sub.l d5,d4
  1029. ; muls d3,d1
  1030. ; muls d2,d0
  1031. ; add.l d1,d0
  1032.  
  1033.  ext.l d2
  1034.  ext.l d3
  1035.  move.l d3,d0
  1036.  move.l d2,d4
  1037.  neg.l d0
  1038.  
  1039.  tst.l d0
  1040.  bgt.s FacingTowardsPlayer
  1041. FAP:
  1042.  tst.l d4
  1043.  bgt.s FAPR
  1044.  cmp.l d4,d0
  1045.  bgt.s LEFTFRAME
  1046.  bra.s AWAYFRAME
  1047.  
  1048. FAPR:
  1049.  neg.l d0
  1050.  cmp.l d0,d4
  1051.  bgt.s RIGHTFRAME
  1052.  bra.s AWAYFRAME
  1053.  
  1054. FacingTowardsPlayer
  1055.  
  1056.  tst.l d4
  1057.  bgt.s FTPR
  1058.  neg.l d4
  1059.  cmp.l d0,d4
  1060.  bgt.s LEFTFRAME
  1061.  bra.s TOWARDSFRAME
  1062.  
  1063. FTPR:
  1064.  cmp.l d0,d4
  1065.  bgt.s RIGHTFRAME
  1066. TOWARDSFRAME:
  1067.  move.l #0,d0
  1068.  rts
  1069. RIGHTFRAME:
  1070.  move.l #1,d0
  1071.  rts
  1072. LEFTFRAME:
  1073.  move.l #3,d0
  1074.  rts
  1075. AWAYFRAME:
  1076.  move.l #2,d0
  1077.  rts
  1078.  
  1079. deadframe: dc.l 0
  1080. screamsound: dc.w 0
  1081. nasheight: dc.w 0
  1082. tempcos: dc.w 0
  1083. tempsin: dc.w 0
  1084. tempx: dc.w 0
  1085. tempz: dc.w 0
  1086.  
  1087. RunAround:
  1088.  
  1089.  movem.l d0/d1/d2/d3/a0/a1,-(a7)
  1090.  
  1091.  move.w oldx,d0
  1092.  sub.w newx,d0    ; dx
  1093.  asr.w #1,d0
  1094.  move.w oldz,d1
  1095.  sub.w newz,d1    ; dz
  1096.  asr.w #1,d1
  1097.  
  1098.  move.l ObjectPoints,a1
  1099.  move.w (a0),d2
  1100.  lea (a1,d2.w*8),a1
  1101.  move.w (a1),d2
  1102.  sub.w tempx,d2
  1103.  move.w 4(a1),d3
  1104.  sub.w tempz,d3
  1105.  
  1106.  muls tempcos,d2
  1107.  muls tempsin,d3
  1108.  sub.l d3,d2
  1109.  
  1110.  blt.s headleft
  1111.  neg.w d0
  1112.  neg.w d1
  1113. headleft:
  1114.  sub.w d1,newx
  1115.  add.w d0,newz
  1116.  
  1117.  movem.l (a7)+,d0/d1/d2/d3/a0/a1
  1118.  rts
  1119.  
  1120. bbbb: dc.w 0
  1121. tsx: dc.w 0
  1122. tsz: dc.w 0
  1123. fsx: dc.w 0
  1124. fsz: dc.w 0
  1125.  
  1126. SHOOTPLAYER1
  1127.  
  1128.  move.w oldx,tsx
  1129.  move.w oldz,tsz
  1130.  move.w newx,fsx
  1131.  move.w oldx,fsz
  1132.  
  1133.  move.w p1_xoff,newx
  1134.  move.w p1_zoff,newz
  1135.  move.w (a1),oldx
  1136.  move.w 4(a1),oldz
  1137.  
  1138.  move.w newx,d1
  1139.  sub.w oldx,d1
  1140.  move.w newz,d2
  1141.  sub.w oldz,d2
  1142.  jsr GetRand
  1143.  asr.w #4,d0
  1144.  muls d0,d1
  1145.  muls d0,d2
  1146.  swap d1
  1147.  swap d2
  1148.  add.w d1,newz
  1149.  sub.w d2,newx
  1150.  
  1151.  move.l p1_yoff,d1
  1152.  add.l #15*128,d1
  1153.  asr.l #7,d1
  1154.  move.w d1,d2
  1155.  muls d0,d2
  1156.  swap d2
  1157.  add.w d2,d1
  1158.  ext.l d1
  1159.  asl.l #7,d1
  1160.  move.l d1,newy
  1161.  move.w 4(a0),d1
  1162.  ext.l d1
  1163.  asl.l #7,d1
  1164.  move.l d1,oldy
  1165.  
  1166.  move.b ObjInTop(a0),StoodInTop
  1167.  
  1168.  st exitfirst
  1169.  move.w #0,extlen
  1170.  move.b #$ff,awayfromwall
  1171.  move.w #%0000010000000000,wallflags
  1172.  move.l #0,StepUpVal
  1173.  move.l #$1000000,StepDownVal
  1174.  move.l #0,thingheight
  1175.  move.l objroom,-(a7)
  1176.  movem.l d0-d7/a0-a6,-(a7)
  1177.  
  1178. .again:
  1179.  jsr MoveObject
  1180.  tst.b hitwall
  1181.  bne.s .nofurther
  1182.  move.w newx,d0
  1183.  sub.w oldx,d0
  1184.  add.w d0,oldx
  1185.  add.w d0,newx
  1186.  move.w newz,d0
  1187.  sub.w oldz,d0
  1188.  add.w d0,oldz
  1189.  add.w d0,newz
  1190.  move.l newy,d0
  1191.  sub.l oldy,d0
  1192.  add.l d0,oldy
  1193.  add.l d0,newy
  1194.  bra .again
  1195.  
  1196. .nofurther:
  1197.  
  1198.  move.l objroom,backroom
  1199.  
  1200.  movem.l (a7)+,d0-d7/a0-a6
  1201.  move.l (a7)+,objroom
  1202.  
  1203.  move.l PlayerShotData,a0
  1204.  move.w #19,d1
  1205. .findonefree2
  1206.  move.w 12(a0),d2
  1207.  blt.s .foundonefree2
  1208.  adda.w #64,a0
  1209.  dbra d1,.findonefree2
  1210.  
  1211.  move.w tsx,oldx
  1212.  move.w tsz,oldz
  1213.  move.w fsx,newx
  1214.  move.w fsz,oldx
  1215.  
  1216.  rts
  1217.  
  1218. .foundonefree2:
  1219.  
  1220.  move.l ObjectPoints,a1
  1221.  move.w (a0),d2
  1222.  move.w newx,(a1,d2.w*8)
  1223.  move.w newz,4(a1,d2.w*8)
  1224.  move.b #1,shotstatus(a0)
  1225.  move.w #0,shotgrav(a0)
  1226.  move.b #0,shotsize(a0)
  1227.  move.b #0,shotanim(a0)
  1228.  
  1229.  move.l backroom,a1
  1230.  move.w (a1),12(a0)
  1231.  st worry(a0)
  1232.  move.l wallhitheight,d0
  1233.  move.l d0,accypos(a0)
  1234.  asr.l #7,d0
  1235.  move.w d0,4(a0)
  1236.  
  1237.  move.w tsx,oldx
  1238.  move.w tsz,oldz
  1239.  move.w fsx,newx
  1240.  move.w fsz,oldx
  1241.  
  1242.  rts
  1243.  
  1244. futurex: dc.w 0
  1245. futurez: dc.w 0
  1246.  
  1247. FireAtPlayer1:
  1248.  
  1249.  move.l ObjectPoints,a1
  1250.  move.w (a0),d1
  1251.  lea (a1,d1.w*8),a1
  1252.  
  1253.  move.l NastyShotData,a5
  1254.  move.w #19,d1
  1255. .findonefree
  1256.  move.w 12(a5),d0
  1257.  blt.s .foundonefree
  1258.  adda.w #64,a5
  1259.  dbra d1,.findonefree
  1260.  
  1261.  bra .cantshoot
  1262.  
  1263. .foundonefree:
  1264.  
  1265.  move.b #2,16(a5)
  1266.  
  1267.  move.l #ObjRotated,a6
  1268.  move.w (a0),d0
  1269.  lea (a6,d0.w*8),a6
  1270.  
  1271.  move.l (a6),Noisex
  1272.  move.w #100,Noisevol
  1273.  move.b #1,chanpick
  1274.  clr.b notifplaying
  1275.  move.b SHOTTYPE,d0
  1276.  move.w #0,shotlife(a5)
  1277.  move.b d0,shotsize(a5)
  1278.  move.b SHOTPOWER,shotpower(a5)
  1279.  movem.l a5/a1/a0,-(a7)
  1280.  move.b 1(a0),IDNUM
  1281.  jsr MakeSomeNoise
  1282.  movem.l (a7)+,a5/a1/a0
  1283.  
  1284.  move.l ObjectPoints,a2
  1285.  move.w (a5),d1
  1286.  lea (a2,d1.w*8),a2
  1287.  move.w (a1),oldx
  1288.  move.w 4(a1),oldz
  1289.  move.w PLR1_xoff,newx
  1290.  move.w PLR1_zoff,newz
  1291.  
  1292.  jsr CalcDist
  1293.  move.w XDIFF1,d6
  1294.  muls distaway,d6
  1295.  divs SHOTSPEED,d6
  1296.  asr.w #4,d6
  1297.  add.w d6,newx
  1298.  move.w ZDIFF1,d6
  1299.  muls distaway,d6
  1300.  divs SHOTSPEED,d6
  1301.  asr.w #4,d6
  1302.  add.w d6,newz
  1303.  move.w newx,futurex
  1304.  move.w newz,futurez
  1305.  
  1306.  move.w SHOTSPEED,speed
  1307.  move.w #0,Range
  1308.  jsr HeadTowards
  1309.  
  1310.  move.w newx,d0
  1311.  sub.w oldx,d0
  1312.  move.w newz,d1
  1313.  sub.w oldz,d1
  1314.  move.w SHOTOFFMULT,d2
  1315.  beq.s .nooffset
  1316.  
  1317.  muls d2,d0
  1318.  muls d2,d1
  1319.  asr.l #8,d0
  1320.  asr.l #8,d1
  1321.  add.w d1,oldx
  1322.  sub.w d0,oldz
  1323.  move.w futurex,newx
  1324.  move.w futurez,newz
  1325.  jsr HeadTowards
  1326.  
  1327. .nooffset:
  1328.  
  1329.  move.w newx,d0
  1330.  move.w d0,(a2)
  1331.  sub.w oldx,d0
  1332.  move.w d0,shotxvel(a5)
  1333.  move.w newz,d0
  1334.  move.w d0,4(a2)
  1335.  sub.w oldz,d0
  1336.  move.w d0,shotzvel(a5)
  1337.  
  1338.  move.l #%110010,EnemyFlags(a5)
  1339.  move.w 12(a0),12(a5)
  1340.  move.w 4(a0),d0
  1341.  move.w d0,4(a5)
  1342.  ext.l d0
  1343.  asl.l #7,d0
  1344.  add.l SHOTYOFF,d0
  1345.  move.l d0,accypos(a5)
  1346.  move.b SHOTINTOP,ObjInTop(a5)
  1347.  move.l PLR1_Obj,a2
  1348.  move.w 4(a2),d1
  1349.  sub.w #20,d1
  1350.  ext.l d1
  1351.  asl.l #7,d1
  1352.  sub.l d0,d1
  1353.  add.l d1,d1
  1354.  move.w distaway,d0 
  1355.   
  1356.  move.w SHOTSHIFT,d2
  1357.  asr.w d2,d0
  1358.  tst.w d0
  1359.  bgt.s .okokokok
  1360.  moveq #1,d0
  1361. .okokokok
  1362.  
  1363.  divs d0,d1
  1364.  move.w d1,shotyvel(a5)
  1365.  st worry(a5)
  1366.  
  1367.  move.l GunData,a6
  1368.  moveq #0,d0
  1369.  move.b SHOTTYPE,d0 
  1370.  asl.w #5,d0
  1371.  add.w d0,a6
  1372.  move.w 16(a6),shotgrav(a5)
  1373.  move.w 18(a6),shotflags(a5)
  1374. ; move.w 20(a6),d0
  1375. ; add.w d0,shotyvel(a5)
  1376.  
  1377. .cantshoot
  1378.  rts
  1379.  
  1380.  
  1381. SHOOTPLAYER2
  1382.  
  1383.  move.w oldx,tsx
  1384.  move.w oldz,tsz
  1385.  move.w newx,fsx
  1386.  move.w oldx,fsz
  1387.  
  1388.  move.w p2_xoff,newx
  1389.  move.w p2_zoff,newz
  1390.  move.w (a1),oldx
  1391.  move.w 4(a1),oldz
  1392.  
  1393.  move.w newx,d1
  1394.  sub.w oldx,d1
  1395.  move.w newz,d2
  1396.  sub.w oldz,d2
  1397.  jsr GetRand
  1398.  asr.w #4,d0
  1399.  muls d0,d1
  1400.  muls d0,d2
  1401.  swap d1
  1402.  swap d2
  1403.  add.w d1,newz
  1404.  sub.w d2,newx
  1405.  
  1406.  move.l p2_yoff,d1
  1407.  add.l #15*128,d1
  1408.  asr.l #7,d1
  1409.  move.w d1,d2
  1410.  muls d0,d2
  1411.  swap d2
  1412.  add.w d2,d1
  1413.  ext.l d1
  1414.  asl.l #7,d1
  1415.  move.l d1,newy
  1416.  move.w 4(a0),d1
  1417.  ext.l d1
  1418.  asl.l #7,d1
  1419.  move.l d1,oldy
  1420.  move.b ObjInTop(a0),StoodInTop
  1421.  
  1422.  st exitfirst
  1423.  move.w #0,extlen
  1424.  move.b #$ff,awayfromwall
  1425.  move.w #%0000010000000000,wallflags
  1426.  move.l #0,StepUpVal
  1427.  move.l #$1000000,StepDownVal
  1428.  move.l #0,thingheight
  1429.  move.l objroom,-(a7)
  1430.  movem.l d0-d7/a0-a6,-(a7)
  1431.  
  1432. .again:
  1433.  jsr MoveObject
  1434.  tst.b hitwall
  1435.  bne.s .nofurther
  1436.  move.w newx,d0
  1437.  sub.w oldx,d0
  1438.  add.w d0,oldx
  1439.  add.w d0,newx
  1440.  move.w newz,d0
  1441.  sub.w oldz,d0
  1442.  add.w d0,oldz
  1443.  add.w d0,newz
  1444.  move.l newy,d0
  1445.  sub.l oldy,d0
  1446.  add.l d0,oldy
  1447.  add.l d0,newy
  1448.  bra .again
  1449.  
  1450. .nofurther:
  1451.  
  1452.  move.l objroom,backroom
  1453.  
  1454.  movem.l (a7)+,d0-d7/a0-a6
  1455.  move.l (a7)+,objroom
  1456.  
  1457.  move.l NastyShotData,a0
  1458.  move.w #19,d1
  1459. .findonefree2
  1460.  move.w 12(a0),d2
  1461.  blt.s .foundonefree2
  1462.  adda.w #64,a0
  1463.  dbra d1,.findonefree2
  1464.  
  1465.  move.w tsx,oldx
  1466.  move.w tsz,oldz
  1467.  move.w fsx,newx
  1468.  move.w fsz,oldx
  1469.  
  1470.  rts
  1471.  
  1472. .foundonefree2:
  1473.  
  1474.  move.l ObjectPoints,a1
  1475.  move.w (a0),d2
  1476.  move.w newx,(a1,d2.w*8)
  1477.  move.w newz,4(a1,d2.w*8)
  1478.  move.b #1,shotstatus(a0)
  1479.  move.w #0,shotgrav(a0)
  1480.  move.b #0,shotsize(a0)
  1481.  move.b #0,shotanim(a0)
  1482.  
  1483.  move.l backroom,a1
  1484.  move.w (a1),12(a0)
  1485.  st worry(a0)
  1486.  move.l wallhitheight,d0
  1487.  move.l d0,accypos(a0)
  1488.  asr.l #7,d0
  1489.  move.w d0,4(a0)
  1490.  
  1491.  move.w tsx,oldx
  1492.  move.w tsz,oldz
  1493.  move.w fsx,newx
  1494.  move.w fsz,oldx
  1495.  
  1496.  rts
  1497.  
  1498. FireAtPlayer2:
  1499.  move.l NastyShotData,a5
  1500.  move.w #19,d1
  1501. .findonefree
  1502.  move.w 12(a5),d0
  1503.  blt.s .foundonefree
  1504.  adda.w #64,a5
  1505.  dbra d1,.findonefree
  1506.  
  1507.  bra .cantshoot
  1508.  
  1509. .foundonefree:
  1510.  
  1511.  move.b #2,16(a5)
  1512.  
  1513.  move.l #ObjRotated,a6
  1514.  move.w (a0),d0
  1515.  lea (a6,d0.w*8),a6
  1516.  
  1517.  move.l (a6),Noisex
  1518.  move.w #100,Noisevol
  1519.  move.b #1,chanpick
  1520.  clr.b notifplaying
  1521.  move.b SHOTPOWER,d0
  1522.  move.w #0,shotlife(a5)
  1523.  move.b d0,shotsize(a5)
  1524.  move.b SHOTPOWER,shotpower(a5)
  1525.  movem.l a5/a1/a0,-(a7)
  1526.  move.b 1(a0),IDNUM
  1527.  jsr MakeSomeNoise
  1528.  movem.l (a7)+,a5/a1/a0
  1529.  
  1530.  move.l ObjectPoints,a2
  1531.  move.w (a5),d1
  1532.  lea (a2,d1.w*8),a2
  1533.  move.w (a1),oldx
  1534.  move.w 4(a1),oldz
  1535.  move.w PLR2_xoff,newx
  1536.  move.w PLR2_zoff,newz
  1537.  move.w SHOTSPEED,speed
  1538.  move.w #0,Range
  1539.  jsr HeadTowards
  1540.  
  1541.  move.w newx,d0
  1542.  sub.w oldx,d0
  1543.  move.w newz,d1
  1544.  sub.w oldz,d1
  1545.  move.w SHOTOFFMULT,d2
  1546.  beq.s .nooffset
  1547.  
  1548.  muls d2,d0
  1549.  muls d2,d1
  1550.  asr.l #8,d0
  1551.  asr.l #8,d1
  1552.  add.w d1,oldx
  1553.  sub.w d0,oldz
  1554.  move.w PLR2_xoff,newx
  1555.  move.w PLR2_zoff,newz
  1556.  jsr HeadTowards
  1557.  
  1558. .nooffset:
  1559.  
  1560.  
  1561.  move.w newx,d0
  1562.  move.w d0,(a2)
  1563.  sub.w oldx,d0
  1564.  move.w d0,shotxvel(a5)
  1565.  move.w newz,d0
  1566.  move.w d0,4(a2)
  1567.  sub.w oldz,d0
  1568.  move.w d0,shotzvel(a5)
  1569.  
  1570.  move.l #%110010,EnemyFlags(a5)
  1571.  move.w 12(a0),12(a5)
  1572.  move.w 4(a0),d0
  1573.  move.w d0,4(a5)
  1574.  ext.l d0
  1575.  asl.l #7,d0
  1576.  add.l SHOTYOFF,d0
  1577.  move.l d0,accypos(a5)
  1578.  move.b SHOTINTOP,ObjInTop(a5)
  1579.  move.l PLR2_Obj,a2
  1580.  move.w 4(a2),d1
  1581.  sub.w #20,d1
  1582.  ext.l d1
  1583.  asl.l #7,d1
  1584.  sub.l d0,d1
  1585.  add.l d1,d1
  1586.  move.w distaway,d0
  1587.  move.w SHOTSHIFT,d2
  1588.  asr.w d2,d0
  1589.  tst.w d0
  1590.  bgt.s .okokokok
  1591.  moveq #1,d0
  1592. .okokokok
  1593.  divs d0,d1
  1594.  move.w d1,shotyvel(a5)
  1595.  st worry(a5)
  1596.  move.w #0,shotgrav(a5)
  1597. .cantshoot
  1598.  rts
  1599.  
  1600. SHOTYOFF: dc.l 0
  1601. SHOTTYPE: dc.w 0
  1602. SHOTPOWER: dc.w 0
  1603. SHOTSPEED: dc.w 0
  1604. SHOTOFFMULT: dc.w 0
  1605. SHOTSHIFT: dc.w 0
  1606. SHOTINTOP: dc.w 0
  1607.  
  1608. backroom: dc.l 0